import matplotlib.pyplot as plt
import numpy as np
import pandas  as pd
import matplotlib as mpl
mpl.use('TkAgg')  # 出图设置
plt.rcParams['font.sans-serif'] = 'SimSun'#宋体设置
plt.rcParams['axes.unicode_minus'] = False   # 字符显示



# value = list(range(10))
# category = list('qwertyuiop')
#
# fig = plt.figure(figsize=(8, 4))
#
# # 垂直柱状图
# ax1 = fig.add_subplot(121)
# ax1.set_title('图1 垂直柱状图')
# ax1.bar(x=category, height=value)
#
# # 水平柱状图
# ax2 = fig.add_subplot(122)
# ax2.set_title('图2 水平柱状图')
# ax2.barh(y=category, width=value)  # 注意这里参数名和值的传递与bar()不同
#
# plt.show()



# # 效果展示
# value = np.arange(6) ** 2
# category = range(len(value))
#
# fig = plt.figure(figsize=(8, 4))
#
# # 垂直柱状图
# ax1 = fig.add_subplot(121)
# ax1.set_title('图1 垂直柱状图')
# ax1.bar(x=category, height=value,
#         alpha=0.5,  # 透明度
#         width=0.5,  # 每个条形的宽度
#         color='yellow',  # 填充前景色
#         edgecolor='red',  # 边框颜色
#         linewidth=3  # 边框宽度
#         )
#
# # 水平柱状图
# ax2 = fig.add_subplot(122)
# ax2.set_title('图2 水平柱状图')
# ax2.barh(y=category, width=value,
#          alpha=1,  # 透明度
#          height=0.8,  # 每个条形的宽度
#          color=['green', 'red', 'yellow', 'blue', 'grey', 'magenta'],  # 填充前景色
#
#          )
#
# plt.show()



# #堆叠柱状图
# x = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
# y1 = [7,6,5,4,3,2,1]
# y2 = [1,2,3,3,1,1,0.5]
#
# plt.figure(figsize=(10,7))#设置画布的尺寸
#
# plt.bar(x, y1, label="系列1",edgecolor = 'black')  #  y1 的柱状图
# # plt.show()
# plt.bar(x, y2, label="系列2",edgecolor = 'black')  #  y2 的柱状图
# # plt.show()
# plt.legend(loc=1,fontsize=14)  # 设置图例位置
# plt.ylabel('我是Y轴',fontsize=16)
# plt.xlabel('我是X轴',fontsize=16)
# plt.title("基础柱状图——堆叠柱状图",fontsize=18)
# # plt.show()
# for x1, y1, y2 in zip(x, y1, y2):
#     print(x1,y1,y2)
#
#     p2 = y2/(y1+y2) #  y2 的柱状图 所占整个柱子的比例
#
#     plt.text(x1 , y2* 0.4, '{:.0%}'.format(p2), ha='center',fontsize = 15)#x1 , y2* 0.4键入文字位置，x轴满，y轴0.4位置
#
# plt.show()





# x = list(range(7))
# y1 = [7, 6, 5, 4, 3, 2, 1]
# y2 = [6, 2, 3, 3, 1, 1, 0.5]
# width = 0.4
#
# plt.figure(figsize=(9, 6))
# plt.bar(x, y1, width=0.4, label='系列1', edgecolor='black', alpha=0.7)
# plt.bar([x[i] + 0.4 for i in x],
#         y2,
#         width=width,
#         label='系列2',
#         edgecolor='black')  # 这是比较复杂的写法原因是 list 每个都加个数字   加上0.4代表是可以平分width= 0.8 的宽度
#
#
# plt.xticks(x, ['周一', '周二', '周三', '周四', '周五', '周六', '周日'])  # 进行x轴上值的 的替换
# plt.legend(loc=1, fontsize=13)  # 设置图例位置
# plt.ylabel('我是Y轴', fontsize=15)
# plt.xlabel('我是X轴', fontsize=15)
# plt.title("基础柱状图——分组柱状图", fontsize=17)
# plt.show()
#
#
#
# #  第二种方法是 :可以用 np去创建数组进行运算
# x = np.array(list(range(7)))
# y1 = [7, 6, 5, 4, 3, 2, 1]
# y2 = [6, 2, 3, 3, 1, 1, 0.5]
#
#
# plt.figure(figsize=(9, 6))
#
# plt.bar(x, y1, width=0.4, label='系列1', edgecolor='black', alpha=0.7)
# plt.bar(x + width, y2, width=width, label='系列2', edgecolor='black')  # 注意这里发生变化
#
# plt.xticks(x, ['周一', '周二', '周三', '周四', '周五', '周六', '周日'])
#
# plt.legend(loc=1, fontsize=13)  # 设置图例位置
# plt.ylabel('我是Y轴', fontsize=15)
# plt.xlabel('我是X轴', fontsize=15)
# plt.title("基础柱状图——分组柱状图", fontsize=17)
#
# plt.show()



# # 案例
# df = pd.read_csv('./scientists.csv')
#
#
# plt.figure(figsize=(10, 7))  #设置画布的尺寸
# plt.bar(df['Name'], df['Age'], edgecolor='red', width=0.4)  #  红色柱子边框, 边框宽度为0.4
# plt.xticks(rotation=60)  # 设置每个x的值变成 60°倾斜
#
# for x, y in zip(df['Name'], df['Age']):  #  zip形成 一个元组的形式  ,可以用 list方式进行查看
#
#     plt.text(x, y + 2, y, ha='center') #  在 x轴  y轴,  所对应的位置进行注释   注释为 y
#
# plt.ylabel('年龄', fontsize=16)
# plt.xlabel('科学家姓名', fontsize=16)
# plt.title("若干科学家的生命长度", fontsize=18)
# plt.show()